
package proyecto;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Scanner;

import jss2.LinkedBinarySearchTree;

public class Archivo {

	private static Archivo mArchivo = new Archivo("ventas.txt", "facturas.txt");
	private ListaFacturas arbolF;
	private File archivoVentas;
	private File archivoFacturas;
	private ListaVentas arbolV;

	private Archivo(String pVentas, String pFacturas) {
		arbolF = new ListaFacturas();
		arbolV = new ListaVentas();
		archivoFacturas = new File(pFacturas);
		archivoVentas = new File(pVentas);
	}

	public static Archivo getArchivo() {
		return mArchivo;
	}

	public void actualizarTodo() throws IOException{
		//Cuando decidimos exportar TODAS las facturas y TODAS LAS VENTAS
		this.exportarFacturas(); 
		this.exportarVentas();
	}
	
	public void actualizar() throws IOException{
		//
		this.actualizarFacturas();
		this.actualizarVentas();
	}
	
	public void inicializar(){
		this.importarFacturas();
		this.importarVentas();
	}
	
	
	public void eliminarFacturaFichero(int pId) throws IOException{
		Scanner texto, subLinea;
		
		String linea, id;
		boolean encontrado = false;
		
		try{
			texto = new Scanner(archivoFacturas);
			//ID;IMPORTE;FECHA;PROVEEDOR;TIENDA

			while (texto.hasNextLine() || encontrado){
				linea = texto.nextLine();
				subLinea = new Scanner(linea);
				subLinea.useDelimiter(";");
				
				id = subLinea.next();
				subLinea.close();
				
				int identificadorInt = Integer.parseInt(id);
				if (identificadorInt == pId){
					encontrado = true;
					linea.replaceAll(id, "00");	
				}		
				
			}
			texto.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public void eliminarVentaFichero(int pId) throws IOException{
		Scanner texto, subLinea;
		
		String linea, id;
		boolean encontrado = false;
		
		try{
			texto = new Scanner(archivoFacturas);
			//ID;FECHA;EMPLEADO
			
			while (texto.hasNextLine() || encontrado){
				linea = texto.nextLine();
				subLinea = new Scanner(linea);
				subLinea.useDelimiter(";");
				
				id = subLinea.next();
				subLinea.close();
				
				int identificadorInt = Integer.parseInt(id);
				if (identificadorInt == pId){
					encontrado = true;
					linea.replaceAll(id, "00");	
				}		
				
			}
			texto.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public void mostrarFacturasUnDia(int pDia, int pMes, int pAno){
		arbolF.mostrarUnDia(pDia,pMes,pAno);
	}
	
	public void mostrarFacturasDesdeDia(int pDia, int pMes, int pAno) {
		arbolF.mostrarDesdeDia(pDia,pMes,pAno);
	}
	
	public void mostrarVentasUnDia(int pDia, int pMes, int pAno){
		arbolV.mostrarUnDia(pDia,pMes,pAno);
	}
	
	public void mostrarVentasDesdeDia(int pDia, int pMes, int pAno) {
		arbolV.mostrarDesdeDia(pDia,pMes,pAno);
	}
	
	private void importarFacturas(){
		Scanner texto, subLinea;
		String linea, importe, fecha, proveedor, tienda, id;
		Factura fact;
		
		try{
			texto = new Scanner(archivoFacturas);
			//ID;IMPORTE;FECHA;PROVEEDOR;TIENDA

			while (texto.hasNextLine()){
				linea = texto.nextLine();
				subLinea = new Scanner(linea);
				subLinea.useDelimiter(";");
				
				id = subLinea.next();
				importe = subLinea.next();
				fecha = subLinea.next();
				proveedor = subLinea.next();
				tienda = subLinea.next();
				subLinea.close();
				
				if (id != "00"){
					Date pFecha = toDate(fecha);
					Double pImporte = Double.parseDouble(importe);
					int pId = Integer.parseInt(id);
					boolean pTienda = Boolean.parseBoolean(tienda);
				
					fact = new Factura(pImporte, pFecha, pId, proveedor, pTienda);
					arbolF.anadirFactura(fact);
				}
			}
			texto.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	private void exportarFacturas() throws IOException{
		arbolF.exportarFacturas(archivoFacturas);
	}
	
	private void actualizarFacturas() throws IOException{
		
	}
	
	private void importarVentas() {
		Scanner texto, subLinea;
		String linea, fecha, empleado, id;
		Venta v;
		
		try{
			texto = new Scanner(archivoVentas);
			//ID;FECHA;EMPLEADO
			
			while (texto.hasNextLine()){
				linea = texto.nextLine();
				subLinea = new Scanner(linea);
				subLinea.useDelimiter(";");
				
				id = subLinea.next();
				fecha = subLinea.next();
				empleado = subLinea.next();
				subLinea.close();
				
				Date f = toDate(fecha);
				int pId = Integer.parseInt(id);
				
				v = new Venta(f, pId, empleado);
				arbolV.anadirVenta(v);
			}
			texto.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	private void exportarVentas() throws IOException{
		arbolV.exportarVentas(archivoVentas);
	}
	
	private void actualizarVentas() throws IOException{
		
	}
	
	
	private Date toDate(String pFecha){
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        String strFecha = pFecha;
        Date fecha = null;
	
        try {
        	fecha = formato.parse(strFecha);
        	return fecha;
		} 
        	catch (ParseException ex) {
			ex.printStackTrace();
			return fecha;
        	}
        }
	
	
}
